#include <bits/stdc++.h>
using namespace std;
const int N = 1010, M = 2e5 + 10, MOD = 1e9 + 7;
vector<int> cnt[M];  // 记录约数
int n, a[N], f[N];
bool st[N];
int main() {
  cin >> n;
  for (int i = 0; i < n; ++i) cin >> a[i];
  for (int i = 1; i < M; ++i) {  // 枚举约数
    for (int j = 2 * i; j < M; j += i) {
      cnt[j].push_back(i);
    }
  }
  f[0] = 1;
  for (int i = 1; i < n; ++i) {  // 对于前i个区间，固定右端点
    memset(st, 0, sizeof st);
    for (int j = i - 1; j >= 0; --j) {  // 向前枚举该区间左端点
      int k = a[i] - a[j];
      int num = 0;
      for (auto x : cnt[k]) {
        if (st[x]) continue;
        st[x] = true;
        num++;  // 对于k的约数（即长度的约数），筛掉
      }
      st[k] = true;  // 同时把桩子所在的点筛掉
      f[i] = (f[i] + (long long)f[j] * num) % MOD;  // 更新dp数组
    }
  }
  cout << f[n - 1] << endl;
}
